/**
 * TradingView uni对象修复测试
 * 验证getEnvironment函数在不同环境下的工作状态
 */

import { getEnvironment } from './tradingview-loader.js'

/**
 * 测试uni对象修复
 */
export function testUniFix() {
  console.log('=== 测试uni对象修复 ===')
  
  try {
    const env = getEnvironment()
    console.log('✅ 环境检测成功:', env)
    
    // 验证返回的数据结构
    const requiredKeys = ['isApp', 'isH5', 'platform']
    const missingKeys = requiredKeys.filter(key => !(key in env))
    
    if (missingKeys.length > 0) {
      console.error('❌ 缺少必要的环境信息:', missingKeys)
      return false
    }
    
    console.log('✅ uni对象修复测试通过')
    return true
    
  } catch (error) {
    console.error('❌ uni对象修复测试失败:', error)
    return false
  }
}

/**
 * 测试不同环境下的行为
 */
export function testEnvironmentScenarios() {
  console.log('=== 测试不同环境场景 ===')
  
  // 模拟不同环境
  const scenarios = [
    { name: 'H5环境', hasUni: false, hasWindow: true },
    { name: 'APP环境', hasUni: true, hasWindow: true },
    { name: '未知环境', hasUni: false, hasWindow: false }
  ]
  
  scenarios.forEach(scenario => {
    console.log(`测试场景: ${scenario.name}`)
    
    // 临时修改全局对象进行测试
    const originalUni = typeof window !== 'undefined' ? window.uni : undefined
    const originalWindow = typeof window !== 'undefined' ? window : undefined
    
    try {
      if (scenario.hasUni) {
        if (typeof window !== 'undefined') {
          window.uni = { getSystemInfoSync: () => ({ platform: 'android' }) }
        }
      } else {
        if (typeof window !== 'undefined') {
          delete window.uni
        }
      }
      
      const env = getEnvironment()
      console.log(`✅ ${scenario.name} 测试通过:`, env.platform)
      
    } catch (error) {
      console.error(`❌ ${scenario.name} 测试失败:`, error)
    } finally {
      // 恢复原始状态
      if (typeof window !== 'undefined') {
        if (originalUni) {
          window.uni = originalUni
        } else {
          delete window.uni
        }
      }
    }
  })
}

/**
 * 运行完整的uni修复测试
 */
export function runUniFixTests() {
  console.log('🚀 开始uni对象修复测试...')
  
  try {
    // 1. 基本功能测试
    const basicTest = testUniFix()
    
    // 2. 环境场景测试
    testEnvironmentScenarios()
    
    console.log('=== 测试结果 ===')
    console.log('基本功能测试:', basicTest ? '✅ 通过' : '❌ 失败')
    
    const allOk = basicTest
    console.log('总体结果:', allOk ? '✅ 所有测试通过' : '❌ 存在问题')
    
    return allOk
  } catch (error) {
    console.error('❌ 测试过程中出现错误:', error)
    return false
  }
}

// 如果在浏览器环境中，将测试函数挂载到window对象
if (typeof window !== 'undefined') {
  window.TradingViewUniFixTest = {
    testUniFix,
    testEnvironmentScenarios,
    runUniFixTests
  }
}
